package com.vhall.component.service.interactive;

import com.vhall.component.entity.account.dto.IndexDto;
import com.vhall.component.entity.interactive.entity.QuestionsEntity;
import com.vhall.component.entity.interactive.vo.*;

import java.util.List;

/**
 * @author guoxin.wang
 * @date 2021-06-10 15:21
 */
public interface QuestionService {

    /**
     * 列表
     *
     * @param query 参数
     * @return 返回值
     */
    QuestionPage<QuestionListRspVO> list(QuestionListQuery query);

    /**
     * 插入数据
     *
     * @param req 参数
     * @return 返回值
     */
    QuestionsEntity create(QuestionCreateReqVO req);

    /**
     * 删除问卷
     *
     * @param req 参数
     * @return 返回值
     */
    Boolean delete(QuestionDeleteReqVO req);

    /**
     * 提交答案
     *
     * @param roomId     参数
     * @param questionId 参数
     * @return 返回值
     */
    List<QuestionSubmitInfoRspVo> submitInfo(String roomId, Integer questionId);

    /**
     * 检查
     *
     * @param accountId  参数
     * @param roomId     参数
     * @param questionId 参数
     * @return 返回值
     */
    Boolean checkSurvey(Integer accountId, String roomId, Integer questionId);

    /**
     * 检查
     *
     * @param accountId  参数
     * @param roomId     参数
     * @param questionId 参数
     * @param answerId   参数
     * @param extend     参数
     * @return 返回值
     */
    boolean answer(Integer accountId, String roomId, Integer questionId, Integer answerId, String extend);

    /**
     * 游客回答
     *
     * @param i          参数
     * @param roomId     参数
     * @param questionId 参数
     * @param answerId   参数
     * @param extend     参数
     * @param deviceId   参数
     * @return 返回值
     */
    boolean visitorAnswer(Integer i, String roomId, Integer questionId, Integer answerId, String extend, String deviceId);

    /**
     * 发布
     *
     * @param roomId     参数
     * @param accountId  参数
     * @param questionId 参数
     * @return 返回值
     */
    boolean publish(Integer accountId, String roomId, Integer questionId);

    /**
     * 更新
     *
     * @param reqVo 参数
     * @return 返回值
     */
    QuestionsEntity update(QuestionUpdateReqVo reqVo);

    /**
     * 取消发布
     *
     * @param roomId     参数
     * @param accountId  参数
     * @param questionId 参数
     * @return 返回值
     */
    boolean publishCancel(Integer accountId, String roomId, Integer questionId);


    /**
     * 推送
     *
     * @param roomId     参数
     * @param questionId 参数
     * @param accountId  参数
     * @return 返回值
     */
    boolean repush(Integer accountId, String roomId, Integer questionId);

    /**
     * 复制
     *
     * @param roomId     参数
     * @param questionId 参数
     * @param accountId  参数
     * @return 返回值
     */
    QuestionsEntity copy(Integer accountId, String roomId, Integer questionId);

    /**
     * 问卷详细信息
     *
     * @param reqVo 参数
     * @return 返回值
     */
    QuestionsEntity info(QuestionInfoReqVo reqVo);

    /**
     * 解绑
     *
     * @param roomId     参数
     * @param questionId 参数
     * @param accountId  参数
     * @return 返回值
     */
    Integer unbindRoom(Integer questionId, String roomId, Integer accountId);

    /**
     * 列表
     *
     * @param query 参数
     * @return 返回值
     */
    QuestionPage<QuestionListRspVO> watcherList(QuestionListQuery query);

    /**
     * 列表
     *
     * @param query 参数
     * @return 返回值
     */
    QuestionListStatRspVO<QuestionStatDTO> statList(QuestionListQuery query);

    /**
     * 总数
     *
     * @param req 参数
     * @return 返回值
     */
    QuestionNumRspVO statNum(QuestionNumReqVO req);

    /**
     * 总数
     *
     * @param roomId       参数
     * @param startTimeStr 参数
     * @param page         参数
     * @param pageSize     参数
     * @param queryCount   参数
     * @return 返回值
     */
    QuestionPageRspVO<Integer> queryQuesAccounts(String roomId, String startTimeStr, int page, int pageSize, boolean queryCount);

    /**
     * 总数
     *
     * @param roomId       参数
     * @param startTimeStr 参数
     * @return 返回值
     */
    Integer queryAllPartakeAccountsCount(String roomId, String startTimeStr);

    /**
     * 获取总条数
     *
     * @param beginTime
     * @return
     */
    IndexDto getCount(String beginTime);

    /**
     * 获取总条数-数据权限
     *
     * @param beginTime
     * @param orgCode
     * @return
     */
    IndexDto getCount(String beginTime, String orgCode);
}
